#ifndef ADAM_ALGORITHM_STRING_H
#define ADAM_ALGORITHM_STRING_H

#include <stdbool.h>

/**
 * 字符串。
 *
 * 字符串数组用char **表示用着实在难受，就想着把字符串封装一下。
 * 封装性较差，如果用作类库或者函数库的话其他程序员可能因为错误操作导致程序不可用。
 * 暂时先不考虑参数校验。
 *
 * 学习参考了Java、C++以及其他面向对象编程语言；
 * 学习参考了Go、Rust等编程语言。
 */
struct string {
  char *chs;
  int len;
};

/**
 * 创建字符串
 * @param str 字符数组
 */
struct string *string_new(char *str);

/**
 * 将数字转换成字符串
 * @param num 数字
 */
struct string *string_value_of(int num);

/**
 * 连接字符串，将str连接到S后面
 * 非线程安全！
 *
 * @param S 字符串
 * @param str 需要连接的字符数组
 */
struct string *string_append(struct string *S, char *str);

/**
 * 判断字符串是否相等
 *
 * @param S 字符串
 * @param another 另一个字符串
 * @return 如果相等返回true，否则返回false
 */
bool string_equals(struct string *S, struct string *another);

/**
 * 释放字符串所占用的内存空间
 * @param S 字符串
 */
void string_free(struct string *S);

#endif
